home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / files / articulo.016 < prev    next >
Encoding:
Text File  |  1997-06-11  |  6.6 KB  |  215 lines

  1. *cX               TÉCNICAS VIRICAS
  2. *cR
  3.   Güeno, seguimos con nuestro cursillo (ejem) 
  4. de técnicas víricas. Este número  nos  dedica
  5. remos a una nimiedad (es que no  tenía  ganas
  6. de hacerlo muy  largo),  y  son...  ¡técnicas
  7. antiheurísticas!
  8.   La verdad es que esto es bien  fácil,  pero
  9. daré algunos truquillos para que  no  tengais
  10. que pensarlos vosotros... vaguillos!
  11.   Bien, vamos a guiarnos por las banderas del 
  12. ThunderByte, que es uno de los  mejores  anti
  13. virus que hay (a mi juicio). Si detectamos un 
  14. virus con este, nos dará diferentes  banderas
  15. o "*cYflags*cR", que es lo que se intenta evitar.
  16.   Una de las más importantes es el flag  "*cLL*cR",
  17. que nos  dice  que  el  programa  captura  la
  18. ejecución de  software.  Esto  lo  hacen  los
  19. virus  para  infectar  por  ejecución,   como
  20. sabréis, y en concreto se hace esto:
  21. *cU
  22. NuevaInt21h:
  23.   CMP   AX, 4B00h ; Función en la int 
  24.            ; 21h que ejecuta un programa
  25.   JZ    InfectaPrograma
  26.                    ; Queda claro, ¿no?
  27.   IRET             ; Es así más o menos.
  28. *cR
  29.   Esto, simplemente, ya  revela  la  voluntad
  30. del programa  en  capturar  la  ejecución  de
  31. programas para su infección.  Pero,  haciendo
  32. lo siguiente, se hace lo mismo:
  33. *cU
  34. NuevaInt21h:
  35.   CMP   AH, 4Ch
  36.   JAE   FinInterrupcion
  37.   CMP   AH, 4Ah
  38.   JBE   FinInterrupcion
  39.   OR    AL, AL
  40.   JZ    InfectaPrograma
  41. FinInterrupcion:
  42.   IRET
  43. InfectaPrograma:
  44.   ...
  45. *cR
  46.   Esto  hace  exactamente  lo  mismo  que  el
  47. primer ejemplo, nada mas  que,  por  comproba
  48. ción indirecta... ¡logramos evitar  el  flag!
  49. (sí, sí, ya sé que ocupa  más  espacio,  pero
  50. compensa una cosa por otra).
  51.   Otro flag bastante importante es el  de  la
  52. diferenciación  en  un  archivo  si  es  *cT.COM*cR
  53. o *cT.EXE*cR. Un virus lo hace leyendo los 2  prime
  54. ros bytes  y  mirando  si  son  '*cZMZ*cR'  o  '*cZZM*cR'
  55. (inicio de una  cabecera  de  EXE).  Podríais
  56. decir: "¿Y qué tal  si  se  hace  mirando  el
  57. nombre del archivo?".  Esto  conlleva  proble
  58. mas, sobre todo por el propio DOS: el DOS  no
  59. mira la extensión al ejecutar, sino estos dos 
  60. primeros  bytes,  así  que   podremos   tener
  61. un*cT .COM *cRrenombrado a *cT.EXE*cR  y  viceversa.  Por
  62. tanto es más seguro hacer lo de siempre.
  63.   El  ThunderByte,  ante  esta  técnica,  nos
  64. marcará el flag '*cLZ*cR'. Y la  solución  es  bien
  65. fácil: comprobación indirecta  (¿os  suena?).
  66. Hay un montón de maneras de  hacer  lo  mismo
  67. sin que sea tan obvio nuestro objetivo.  Este
  68. es sólo un  ejemplo.  Esta  sería  la  manera
  69. habitual:
  70. *cU
  71.  CMP  WORD PTR [Los2PrimerosBytes], 'MZ'
  72.  JZ   EsunEXE
  73.  CMP  WORD PTR [Los2PrimerosBytes], 'ZM'
  74.  JZ   EsunEXE
  75. EsunCOM:   ...
  76. *cR
  77.   Y esta es una manera alternativa que  evita
  78. la activación del flag:
  79. *cU
  80.  MOV  AX, [Los2PrimerosBytes]
  81.  XOR  AX, 'MZ' ; Un XOR dejará a 0 AX si
  82.                ; éste es 'MZ'
  83.  JZ   EsunEXE
  84.  CMP  AX, 1717h ; Si fuera 'ZM', hacer
  85.                 ; una operación 'ZM' XOR 
  86.                 ;'MZ' da el valor  1717h
  87.  JZ   EsunEXE
  88. EsunCOM:   ...
  89. *cR
  90.   Creo que la  idea  está  captada,  ¿no?  Se
  91. trata de  buscar  otra  manera  de  poner  lo
  92. mismo,  investigando  y  probando  hasta  que
  93. todos los flags comprometedores desaparezcan. 
  94. Ahora una lista de los flags más comunes y  a
  95. qué son debidos:
  96. *cK
  97. Flag    Descripcion
  98. ----    -----------
  99.  
  100. *cQZ*cW -->*cE   El programa diferencia entre EXE
  101.         y COM.
  102.  
  103.      *cR- Causa: *cTInstrucciones  
  104.        CMP XXX, 'MZ'   ó   CMP XXX, 'ZM'
  105.  
  106. *cQL*cW --> *cE  El programa captura la ejecución 
  107.         de software.
  108.  
  109.     *cR - Causa: *cTInstrucción  CMP AH, 4Bh  
  110.         o CMP AX, 4BXXh
  111.  
  112. *cQM*cW --> *cE  El programa tiene código para 
  113.         quedarse residente en memoria.
  114.  
  115.     *cR - Causa: *cTInstrucciones de enganche 
  116.        de interrupciones por medio de la
  117.        función 25h de la interrupción 
  118.        21h o manipulaciones directas de
  119.        la TVI (Tabla de Vectores de 
  120.        Interrupción).
  121.  
  122. *cQA*cW --> *cE  Reserva de memoria sospechosa o 
  123.         no standard
  124.  
  125.     *cR - Causa: *cTInstrucciones habituales 
  126.        de instalación por MCBs, que se 
  127.        ha convertido en el "standard" de 
  128.        los virus. Por ligeras variacio
  129.        nes en estas instrucciones, se 
  130.        puede evitar el flag.
  131.  
  132. *cQO*cW --> *cE  Existe código para sobreescri
  133.         bir/mover un programa en memo
  134.         ria.
  135.  
  136.     *cR - Causa: *cTInstrucción 
  137.        REP MOVSB/MOVSW o reiteración 
  138.        exagerada de movimientos de  
  139.        valores a memoria.
  140.  
  141. *cQ#*cW --> *cE  Rutina de desencriptado o trampa 
  142.         para debuggers.
  143.  
  144.     *cR - Causa: *cTCódigo para desencriptar. 
  145.        El ThunderByte capta multitud de 
  146.        variaciones entre desencriptado
  147.        res y no es fácil evitar este 
  148.        flag.
  149.  
  150. *cQt*cW --> *cE  Código para ser ejecutado en un 
  151.         tiempo concreto (día u hora).
  152.  
  153.     *cR - Causa: *cTLlamada a las funciones 02 
  154.        ó 04 de la int. 1Ah. Llamada a 
  155.        las funciones 2Ah ó 2Ch de la 
  156.        int. 21h.
  157.  
  158. *cQT*cW --> *cE  Tiempo incorrecto en el archivo.
  159.  
  160.     *cR - Causa: *cTSegundos en el archivo a 
  161.         60-62 o años con 100 más de los 
  162.         correctos.
  163.  
  164. *cQB*cW --> *cE  Vuelta al punto de entrada 
  165.         después de modificaciones en él.
  166.  
  167.     *cR - Causa: *cTLa instrucciones habitua
  168.        les de sobreescribir los tres 
  169.        bytes iniciales con el código  
  170.        original, que en un COM infectado 
  171.        ocupa el JMP inicial al código 
  172.        del virus.
  173.  
  174. *cQF*cW --> *cE  Acceso sospechoso a archivo.
  175.  
  176.     *cR - Causa: *cTLlamada pura y dura a la 
  177.        función 40h de la int. 21h y 
  178.        apertura por medio de la función 
  179.        3D02h de la int. 21h.
  180.  
  181. *cQU*cW --> *cE  Llamada a una función o inte
  182.         rrupción indocumentada.
  183.  
  184.     *cR - Causa: *cTEllo mismo. Instrucciones 
  185.        como INT 7Ah, o la función 0FEh 
  186.        de la int. 21h, etc. 
  187.  
  188. *cQS*cW --> *cE  Rutina de búsqueda de ejecuta
  189.         bles.
  190.  
  191.     *cR - Causa: *cTLlamada a las funciones 
  192.        4Eh y 4Fh de la int. 21h con DX 
  193.        apuntando a la cadena '*.EXE' o
  194.        '*.COM', o simplemente estas  
  195.        cadenas.
  196.  
  197. *cQX*cW --> *cE  Capacidades stealth.
  198.  
  199.     *cR - Causa: *cTExactamente, las instruc
  200.        ciones "CMP AH,11h", "CMP 
  201.        AH,12h", "CMP AH, 4Eh" y "CMP AH, 
  202.        4Fh", así como los pares de 
  203.        instrucciones "SUB WORD PTR 
  204.        [Dir], Val / SBB WORD PTR 
  205.        [Dir+2], +00".
  206.  
  207. *cR
  208.   Bien, y aquí se acaba por este número  (que
  209. ya es bastante, co*o*es). Al próximo,  más...
  210. ¿y qué veremos en el próximo número? Pues  no
  211. lo sé, ya se me ocurrirá algo.                    
  212. *cM
  213.                         Líyak el Oscuro
  214.  
  215.